Unity渲染管线(一)

前言

其实一直以来使用 Unity,我没有意识到图形渲染这一块,只是在考虑游戏的逻辑方面,即使后面接触到了 Shader 也没有考虑渲染管线,只是一直用 Unity 内置的渲染管线,知乎收藏了很多大佬的文章也没有看。后面学习 Shader 也是感觉不透彻,看了一些渲染管线的文章却感觉理解更透彻一些了,所以这里开个专栏梳理并尝试自己使用一下 Unity 提供的不同管线方案。

在我看来,Unity 中的渲染管线可以这样理解:通过摄像头、光源、游戏对象的数据,将游戏对象以某种形式表现在屏幕上,有时候可能会用不到光源甚至摄像头,例如 UI 系统就可以不需要摄像头,而默认的 2D 游戏不会用到光源。所以需要厘清在渲染时传入这三种对象的具体数据定义,会遇到一些比较难以理解的术语。

本专栏主要研究 SRP 与 LWRP,通过两种渲染管线快速理解渲染过程并制作自己的渲染管线。

参考文章

简单介绍

五种渲染管线介绍

Unity 目前来看可以分为五种渲染管线,Unity Build-inSRP(Scriptable)LWRP(轻量级)HDRP(高清)Custom RP,而 LWRP、HDRP 可以看做是 SRP 的一种,是官方目前提供的 SRP 的一种模板,根据名字也可以发现,LWRP 偏向性能,HDRP 偏向效果,截止到19.7.13,LWRP 结束了预览版本,而 HDRP 和 SRP 还是预览版本。

Unity Build-in 就是 Unity 默认一直在使用的渲染管线,优点是有很多的效果已经集成在里面了,很多内置的 Shader 可以直接拿来用,不过可能很多地方我们的游戏并没有用到,如果用起来感觉效果不太符合预期可能就要自己自定义管线了。

Custom RP,这个应该是难度最高的,是自己纯手撸一套管线,此专栏不做研究,Unity 官方也是建议先去考虑或学习 SRP 后再考虑或学习此方案,可以参考 SRP官方介绍 中的视频(需fq)。

不同的管线在渲染路径、照明模型等各方面有着不同的方案,为的就是达到不同的目的,例如 LWRP 为了性能就对光源数量做了限制;自定义管线可以制作出更统一更合适的游戏风格,也可以更好地把控渲染的流程与性能。

SRP常见问题

Shader 分类

创建默认对应 GameObject,如 sprite 和 cube,查看其默认的材质以及材质上的 Shader 就可以发现一些不同的地方。

  • 根据接不接收光照分类
    • 不接收光照:Unity 的 2D 贴图、UI系统等默认其实都是不接收光照的 Shader,无论场景中是否有光源,都可以渲染出来,这是因为对应的 Shader 并没有对光照做处理,只是根据 GameObject 本身进行了渲染。
    • 接受光照:Unity 的 3D对象默认是接收光照的,因为一张平面的图不接收光照我们可以直接描述出来其本来的样子,但是 3D 的不进行光照的话就感觉都是一个样子没有明暗对比,会看不出其是立体的。

第一次先讲到这里0-0 很多地方可能落下了,可能也有一部分不够明确,大佬们多担待,后续会慢慢补充。

0%